home *** CD-ROM | disk | FTP | other *** search
- The Linux Ultra-DMA Mini-Howto
- Brion Vibber, brion@pobox.com
- v1.3, 5 March 1998
-
- This document is intended to explain how to use Ultra-DMA aka Ultra-
- ATA aka Ultra33 hard drives and controllers with Linux. The most
- recent version of this mini-Howto can be obtained in HTML format at
- http://pobox.com/~brion/linux/Ultra-DMA.html.
-
- 1. Introduction
-
- This document is intended to explain how to use Ultra-DMA aka Ultra-
- ATA aka Ultra33 hard drives and controllers with Linux. In some cases
- there is no difficulty in using them, but some tweaking can increase
- performance. In other cases, you need to go to extraordinary lengths
- simply to access your hard drives.
-
- 1.1. Disclaimer
-
- The information in this is document is, to the best of my knowledge,
- correct, and should work. However, there may be typos, there may be
- mysterious transmission errors, and there may be strange
- incompatibilities within your own system that prevent the techniques
- described herein from working properly. So... before you go fiddling
- around with you hard drive, BACK UP ANY DATA YOU WANT TO KEEP!
-
- 1.2. Credits
-
- Brion Vibber (brion@pobox.com) - The document itself
-
- Gadi Oxman (gadio@netvision.net.il) - The Promise Ultra33 patch &
- finding the secret numbers for the workaround
-
- John G. (prefect@ipass.net) - VIA VP2 patch & info
-
- Giovanni (giovanni@sudfr.com) - UDMA-enabled VIA-related patch & more
- info
-
- Martin Gaitan - Promise ide0/ide1 workaround
-
- Norman Jacobowitz - Bugged me to add info on the VP3
-
- 1.3. Document History
-
- v1.3, 5 March 1998: VIA VP3 info, better patching instructions,
- pointer to more recent Promise patch.
-
- v1.2, 27 January 1998: Additional Promise workaround info.
-
- v1.1, 21 January 1998: New info about VIA chipset, installing around
- the Promise Ultra33, and enabling Bus Master & UDMA transfer modes.
-
- v1.0, 19 January 1998: More or less complete, first version done in
- SGML.
-
- 2. What is Ultra-DMA and why do I want it?
-
- Here's a brief overview of IDE-based drive technologies:
-
- 2.1. IDE, EIDE, & ATAPI
-
- These are older drive technologies. Most non-SCSI hard drives and
- drive controllers that you can buy today or are likely to be using are
- EIDE, although many of the larger drives now available are UDMA.
-
- 2.2. Bus Master DMA
-
- Bus Master DMA is a technology for increasing the speed of hard disk
- data transfers which requires support from the motherboard and the
- BIOS, and at least some support from the drive.
-
- You can learn more at
- http://developer.intel.com/design/pcisets/busmastr/FAQs.htm.
-
- 2.3. Ultra-DMA aka Ultra-ATA aka Ultra33 aka...
-
- Ultra-DMA has many names, but we'll just call it UDMA in here.
-
- UDMA is a more advanced technology which provides for even faster
- throughput, up to 33.3 MB/s, twice that of EIDE, for much lower prices
- than SCSI. Many new computers come with large UDMA drives and UDMA
- controllers, and it's possible to add a UDMA controller card (such as
- the Promise Ultra33) to an existing system to boost speed, even on
- older non-UDMA drives.
-
- You can learn great details about UDMA at
- http://www.quantum.com/src/whitepapers/ultraata/
-
- 3. Using your UDMA Hard Drive with an EIDE Controller
-
- This is easy to do. Since all UDMA drives are fully EIDE backward-
- compatible, just plunk your drive on your EIDE controller like it was
- any old hard drive & Linux should have no problems detecting or using
- the drive. However, you will of course be limited to the 16.7 MB/s
- bandwidth of EIDE.
-
- 4. Using your hard drives with a UDMA Controller
-
- Well, there's good news and there's bad news. The good news is that a
- UDMA controller can be used with both UDMA hard drives and legacy EIDE
- hard drives, and will be a lot faster than an EIDE controller. The bad
- news is that they're not technically supported by the current stable
- releases of Linux (2.0.x kernels). In some cases the controllers can
- be used in legacy (EIDE-compatible mode) with no difficulty, in others
- simply using the controller requires a bit of effort. In all cases, in
- order to use UDMA transfer speeds, an appropriate patch is required.
- The following sections will each pertain to a specific type of UDMA
- controller.
-
- 5. The Promise Ultra33 IDE
-
- This is a PCI card that has two UDMA channels on it, supporting up to
- four drives. You can look up specs & pricing & such at
- http://www.promise.com.
-
- This card shipped in early model Gateway 2000 Pentium II systems, and
- may or may not be in more recent models.
-
- The more recent development kernels (current is 2.1.88) have generic
- PCI IDE controller support, which ought to automatically detect the
- Promise Ultra33. However, the stable kernels (current is 2.0.33)
- require a patch, and it can be a little difficult to get Linux
- installed because of this.
-
- 5.1. Installing Linux with the Promise
-
- Although there is a patch for the Promise controller, it's not very
- easy to apply a patch and recompile your kernel if you haven't
- installed Linux yet! So, here's a workaround which may or may not work
- for you. Thanks to Gadi Oxman for the following information on getting
- the interface settings:
-
- If we can access the console with the installation disk, we can also
- use "cat /proc/pci" to display the Promise interface settings:
-
- RAID bus controller: Promise Technology Unknown device (rev 1).
- Vendor id=105a. Device id=4d33.
- Medium devsel. IRQ 12. Master Capable. Latency=32.
- I/O at 0xe000. (a)
- I/O at 0xd804. (b)
- I/O at 0xd400. (c)
- I/O at 0xd004. (d)
- I/O at 0xc800. (e)
-
- and pass "ide2=a,b+2 ide3=c,d+2" as a command line parameter to the kernel.
-
- Note that the numbers probably aren't the same as what you'll have.
- Just as an example, the parameters to use for the above set of numbers
- would be ``ide2=0xe000,0xd806 ide3=0xd400,0xd006''. You may or may not
- also need to include the IRQ, which would make it
- ``ide2=0xe000,0xd806,12 ide3=0xd400,0xd006,12''. If you're only using
- the first channel on the Promise controller (for instance, if you only
- have one drive, or two if they're master and slave on the same
- channel, on the Promise), then you won't need to specify ide3.
-
- Note that you can definately get to a command prompt and do
- ``cat/proc/pci'' using Red Hat 5.0 or Slackware 3.4; it's almost
- certainly possible with other distributions but I haven't worked with
- them and don't know how.
-
- Under Red Hat 5.0, use the installation boot floppy, and at the boot
- prompt type ``rescue''. It'll load some stuff, prompt you for the
- supplemental disk, ask you about your monitor and keyboard, and
- finally put you into a command prompt. Then, do ``cat /proc/pci'',
- write down the numbers as above, and reboot from the boot disk. This
- time, type ``linux ide2=(this is where you put the numbers like shown
- above) ide3=(more numbers)''. It should now be able to install onto
- your hard disk without difficulty.
-
- Under Slackware 3.4, the process is very similar. Boot with the boot
- disk of your choice, and at the boot prompt, just hit Enter for now.
- It'll load the kernel and prompt for the root disk. Insert the root
- disk, wait for it to load, and log in as root. Do the ``cat
- /proc/pci'' thing and write down those numbers somewhere safe! Reboot
- with the boot floppy and at the boot prompt type ``ramdisk ide2=(this
- is where you put the numbers) ide3=(some more numbers)''. You should
- then be able to install onto your hard disk as normal.
-
- IMPORTANT: Without the patch (discussed in the next section), the
- kernel needs these boot parameters in order to access your hard disk!
- Therefore it is very important that when you configure LILO, either on
- the hard disk or on a boot floppy, that you give it the exact same
- parameters that you gave when installing. Otherwise your system won't
- boot! It should be possible to give them to LILO when you boot (ie,
- press Shift, type in ``linux ide2=.....'' each time you boot), but
- only if you kept the numbers! It is recommended that you patch your
- kernel as soon as possible so you won't have to worry about that
- anymore; once you're booting off a patched kernel, you can get rid of
- the boot parameters. Also, as far as I know there is no way to pass
- boot parameters to a plain kernel boot floppy (as made with ``make
- zdisk''), you must use LILO or another loader that lets you pass boot
- parameters.
-
- However, unpatched kernels often have a difficult time actually using
- ide2 and ide3, even if the drives are detected properly. So if you
- can't get Linux to install using the above technique, try specifying
- ide0 or ide1 instead of ide2 or ide3 (thanks to Martin Gaitan for this
- technique). This essentially replaces the on-board controller (if
- any) with the Promise Ultra33 as far as the kernel is concerned, and
- you can follow the directions in the next section as if you had
- physically moved it. Note that if you're using an IDE CD-ROM drive
- connected to your on-board controller to install from, you'll want to
- make sure that you don't take over the controller that the CD is on or
- you won't be able to install! If the CD is hda or hdb, use ide1 for
- your hard drive, and if it's hdc or hdd, then use ide0.
-
- 5.2. Installing Linux Around the Promise
-
- If you can't get the software workaround to work, you'll have to try a
- more brute force approach. Here's an alternative method mthat is
- virtually guaranteed to work, but will require you to open up your
- computer and mess about in it. NOTE: If you are not familiar with the
- process of connecting and disconnecting IDE drives, read the manuals
- that came with your computer, your hard drive, and/or the Promise
- Ultra33 before attempting this! If you screw something up and don't
- know how to put it back, you could end up being sorry!
-
- That being said, it's all really quite simple. Most motherboards these
- days have built-in EIDE controllers. Disconnect your hard drive from
- the Ultra33 and connect it to the onboard controller. If you have
- other IDE devices, such as a CD-ROM, tape, or ZIP drive, on your
- oboard controller, it's easiest if you either add the hard drive on an
- unused channel (the secondary instead of the primary) or temporarily
- displace a device that you don't need immediately (such as ZIP or
- tape). Install Linux. Download and apply the Promise UDMA patch (see
- next section).
-
- Now you're ready to move the drive back onto the Promise... almost. To
- be safe, make a kernel-image boot floppy (cd /usr/src/linux ; make
- zdisk), which you will be able to use to boot your system in case LILO
- doesn't work. Actually, to be very safe, make two and put one away for
- now.
-
- Okay, now it's time to think a little... if you have just one hard
- drive and it's going to be on the Promise, then it will most likely be
- /dev/hde (a and b are for the primary onboard controller, c and d for
- the secondary onboard controller). If you're going to put any other
- drives on it, then the slave of the Promise's first channel will be
- /dev/hdf, the master of the second will be /dev/hdg, and the slave of
- the second will be /dev/hdh.
-
- Edit /etc/fstab, and change all the partitions of the hard drives
- you're moving from the onboard drives (/dev/hda, hdb, etc) to their
- new locations on the Promise (/dev/hde, hdf, etc). If you had to
- displace any devices (such as a CD-ROM or ZIP drive) that you want to
- leave on the onboard controller, then change them to their new
- locations as well. For instance, if your CD-ROM was originally the
- master on the primary channel (/dev/hda), but you put your hard disk
- there and had to bump the CD to the slave (/dev/hdb) or to the
- secondary channel (/dev/hdc), and now you want to put it back, then
- change it to /dev/hda.
-
- If you're using LILO, reconfigure LILO to use the new location of the
- drive (LILO configuration is beyond the scope of this document, if you
- don't know how, read the LILO mini-HOWTO
- <http://sunsite.unc.edu/LDP/HOWTO/mini/LILO.html>), or else it
- probably won't be able to boot unless you use that boot floppy I had
- you make, which you will also want to configure to boot off the new
- partition. This is done using the rdev command. Put the floppy in the
- drive and type ``rdev /dev/fd0 /dev/hde1''. Of course that's assuming
- your root partition is the first on your first UDMA drive. If not
- (mine is /dev/hde7, for instance), then obviously use the appropriate
- partition number!
-
- Reboot. Your system should now work fine.
-
- 5.3. Patching for the Promise
-
- There is a kernel patch available for the Promise Ultra33, written by
- Gadi Oxman (gadio@netvision.net.il).
-
- The current version of the patch works on kernel version 2.0.33 and
- can be obtained from Linux Mama
- <http://www.huwig.de/linux/mama/20-newdriver.html>. Note that you
- will need to use bzip2 <http://www.muraroa.demon.co.uk/> to decompress
- this patch rather than gzip.
-
- You can also download a version of the patch for kernel 2.0.30,
- compressed with gzip, from
- http://pobox.com/~brion/linux/promise_update.gz. This version will
- work on 2.0.33 but will result in ``unknown PCI device'' messages
- because of a change in pci.c between 2.0.30 and 2.0.33.
-
- For instructions on how to patch and compile the kernel, make sure you
- have the kernel source and gcc installed and read
- /usr/src/linux/README.
-
- Wondering why you should bother with the patch, aside from saving
- yourself the trouble of the boot parameters from the workaround? Well,
- according to the author:
-
- One advantage of using the kernel patch is that we will be able to use
- bus mastering DMA transfers ("hdparm -d1 /dev/hdx") in case the triton
- driver is compiled into the kernel.
-
- In other words, you'll not only be able to use your hard drive, you'll
- be able to use it at the high speeds that UDMA is supposed to bring!
-
- 6. Intel TX motherboard onboard UDMA controller
-
- Thanks again to Gadi for this info:
-
- Bus mastering DMA support for the Intel TX chipset is available in 2.0.31
- and above.
-
- In older kernels (such as Slackware 3.4's 2.0.30), the controller will
- be used in the slower EIDE mode. In either case the controller will
- be automatically detected by the kernel and you should have no trouble
- using it.
-
- As far as I know there is not a patch to enable full UDMA transfers,
- but having Bus Mastering is still better than not.
-
- 7. The VIA VPx and Related Chipsets
-
- This controller also can be autodetected and used in EIDE mode by an
- unpatched kernel, but if you've got one of these, you'll want to grab
- a patch so you can get faster throughput and do away with annoying
- "unkown PCI device" messages.
-
- One is available at http://www.ipass.net/~prefect/; it is designed for
- the VIA VP2/97 chipset, found on FIC's PA-2007 and PA-2011
- motherboards, but may work on related chipsets. It has been reported
- that it functions on the newer VIA VP3 chipset, your mileage may vary.
-
- Note that this patch only supports Bus Mastering mode, not full UDMA
- mode, but it's still better than plain-vanilla EIDE mode. Follow the
- directions at the patch's site for enabling BMDMA mode.
-
- There is another patch that supports full UDMA mode at
- http://www.pyreneesweb.com/Udma/udma.html, designed for the VIA
- VT82C586B, and it ought to work on the VP2, VP3, VPX, P6 and AGP
- Apollo chipsets. Follow the directions for installation and UDMA
- enabling there, but it is recommended that you back up any data you
- want to keep, as there are potential problems with incompatible
- motherboards. But, if it does work, it should work without problems.
-
- 8. If you still can't get it to work!
-
- If nothing in this document proved helpful, or at least not helpful
- enough to get your machine working, your best bet is to write up a
- message that fully describes your difficulty, what type of UDMA
- controller you have, whether it's onboard or on a card, if your drive
- is actually UDMA or plain EIDE, exactly what configuration of drives
- you have, what version (distribution & kernel versions if possible) of
- Linux you're using, and anything else that sounds useful, and post it
- to the newsgroup comp.os.linux.hardware. You'll probably get some
- helpful suggestions soon.
-
- 9. If you have some information about UDMA stuff that's not in this
- mini-howto...
-
- Great! If you know something I don't, by all means send it to me
- (brion@pobox.com) and I'll put it in this document and update it
- fairly soon.
-
-